package com.cleaningcloud.cld.mapper;

import com.cleaningcloud.cld.domain.CldStaffContract;
import com.cleaningcloud.cld.domain.CldStaffContractStatics;
import com.cleaningcloud.cld.domain.dto.CldStaffContractDto;
import com.cleaningcloud.cld.domain.vo.CldStaffContractVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 人事合同Mapper接口
 *
 * @author cleaningcloud
 * @date 2024-10-22
 */
public interface CldStaffContractMapper {
    /**
     * 查询人事合同
     *
     * @param staffContractId 人事合同主键
     * @return 人事合同
     */
    CldStaffContract selectCldStaffContractByStaffContractId(Long staffContractId);

    /**
     * 查询人事合同列表
     *
     * @param cldStaffContract 人事合同
     * @return 人事合同集合
     */
    List<CldStaffContractVo> selectCldStaffContractList(CldStaffContractDto cldStaffContract);

    /**
     * 新增人事合同
     *
     * @param cldStaffContract 人事合同
     * @return 结果
     */
    int insertCldStaffContract(CldStaffContract cldStaffContract);

    /**
     * 批量新增人事合同
     *
     * @param list
     * @return
     */
    int batchInsertCldStaffContract(List<CldStaffContract> list);

    /**
     * 修改人事合同
     *
     * @param cldStaffContract 人事合同
     * @return 结果
     */
    int updateCldStaffContract(CldStaffContract cldStaffContract);

    /**
     * 删除人事合同
     *
     * @param staffContractId 人事合同主键
     * @return 结果
     */
    int deleteCldStaffContractByStaffContractId(Long staffContractId);

    /**
     * 批量删除人事合同
     *
     * @param staffContractIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCldStaffContractByStaffContractIds(Long[] staffContractIds);


    /**
     * 根据员工id查询当前有效人事合同
     *
     * @param staffId
     * @return
     */
    CldStaffContract selectCldStaffContractByStaffId(Long staffId);


    /**
     * 修改人事合同为终止状态
     *
     * @param staffId
     * @return
     */
    @Update("update cld_staff_contract set contract_status = #{contractStatus} where  staff_id = #{staffId} and project_id = #{projectId}")
    int updateStaffContractStatusByStaffIdAndProjectId(@Param("contractStatus") int contractStatus, @Param("staffId") Long staffId, @Param("projectId") Long projectId);


    /**
     * 根据项目id批量修改人事合同信息为终止
     *
     * @param projectId
     * @return
     */
    @Update("update cld_staff_contract set contract_status = #{contractStatus} where project_id = #{projectId}")
    int allUnbindingContractByProjectId(@Param("contractStatus") int contractStatus, @Param("projectId") Long projectId);


    /**
     * 人事合同汇总
     *
     * @param cldStaffContractStatics
     * @return
     */
    List<CldStaffContractStatics> staffContractStatistics(CldStaffContractStatics cldStaffContractStatics);
}
